package com.qph.app.system.service.impl;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.qph.app.system.dao.IUserDao;
import com.qph.app.system.service.IUserManager;
import com.qph.base.exception.BusinessException;
import com.qph.base.model.Pagination;
import com.qph.base.model.SystemContext;
import com.qph.base.security.entity.User;
import com.qph.base.security.service.IUserService;
import com.qph.base.service.impl.BaseServiceImpl;
import com.qph.utils.base.StringUtil;
import com.qph.utils.encrypt.Md5Encrypt;


/**
 * 用户管理 
 * 
 * 
 * @author Administrator
 *
 */
@Transactional
public class UserServiceImpl extends BaseServiceImpl<User, IUserDao> implements IUserService, IUserManager {

	/*
	 * 
	 * @Cacheable：要缓存的方法或者类，属性：value、key、condition，
	 * 			 value是最主要的，对应ehcache.xml中声明的cache的name；
	 * 			 key的主要作用我认为是给局部更新缓存使用的，并且支持SpEL；
	 * 			 condition是触发条件，空表示全部增加，也支持SpEL。
	 * @CacheEvict：要进行清空缓存的方法或者类，
	 * 			 属性：value、key、condition、allEntries、beforeInvocation，
	 * 			前三者与@Cacheable类似，allEntries为true表示清空全部缓存，默认为false；
	 * 			beforeInvocation为true表示在方法执行以前清理缓存，默认为false
	 * 
	 */
	
	
	/*
	 * (non-Javadoc)
	 * @see com.qph.common.shiro.service.IUserService#getUserByAccount(java.lang.String)
	 */
//	@Cacheable(value=BASE_CACHE,key="#username + 'getUserByUsername'")
	public User getUserByUsername(String username) {
		
		if (StringUtil.isEmpty(username)){
			throw new NullPointerException("查询用户名不能为空！");
		}
		
		return dao.getModel(username);
	}

	
	/*
	 * (non-Javadoc)
	 * @see com.qph.base.service.impl.BaseServiceImpl#insert(java.lang.Object)
	 */
	@Override
	public boolean insert(User t) throws BusinessException {
		
		User user = dao.getModel(t.getUsername());
		
		if (user != null){
			throw new BusinessException("用户名已存在");
		}
		
		t.setPassword(Md5Encrypt.encrypt(t.getPassword()));
		
		return super.insert(t);
	}


	/*
	 * (non-Javadoc)
	 * @see com.qph.base.service.impl.BaseServiceImpl#delete(java.lang.String)
	 */
	@Transactional
	public int delete(String ids) {
		
		if (StringUtil.isEmpty(ids)){
			return 0; 
		}
		String[] idArr = ids.split(",");
		List<String> list = new ArrayList<String>(Arrays.asList(idArr));
		// 删除用户下角色
		dao.delUserRoles(list);
		//删除用户下权限
		dao.delUserPerms(list);
		return dao.batchDelete(list);
	}


	/*
	 * (non-Javadoc)
	 * @see com.qph.app.system.service.IUserManager#getWfpUserListForRole(java.lang.String)
	 */
	public Pagination getWfpUserListForRole(String roleId) {
		List<User> list = dao.getPagedWfpUserListForRole(roleId);
		Pagination pagination = new Pagination();
		pagination.setRows(list);
		pagination.setTotal(SystemContext.getTotal());
		return pagination;
	}


	/*
	 * (non-Javadoc)
	 * @see com.qph.app.system.service.IUserManager#getYfpUserListForRole(java.lang.String)
	 */
	public Pagination getYfpUserListForRole(String roleId) {
		List<User> list = dao.getPagedYfpUserListForRole(roleId);
		Pagination pagination = new Pagination();
		pagination.setRows(list);
		pagination.setTotal(SystemContext.getTotal());
		return pagination;
	}
}
